/**
**************************************************************************************
*Founder Effect                                                                      *
*Copyright (C) 2006-2007, 5d Studios (www.5d-Studios.com)                            *
*                                                                                    *
*This library is free software; you can redistribute it and/or                       *
*modify it under the terms of the GNU Lesser General Public                          *
*License as published by the Free Software Foundation; either                        *
*version 2.1 of the License, or (at your option) any later version.                  *
*                                                                                    *
*This library is distributed in the hope that it will be useful,                     *
*but WITHOUT ANY WARRANTY; without even the implied warranty of                      *
*MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU                   *
*Lesser General Public License for more details.                                     *
*                                                                                    *
*You should have received a copy of the GNU Lesser General Public                    *
*License along with this library; if not, write to the Free Software                 *
*Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA      *
**************************************************************************************
*/
#pragma once

#include <string>
/**
===========================
Myriads File System
===========================
*/
class MFile
{
public:
    MFile(void);
    
    /** Open a file */
    bool Open( const std::string &filename );

    /** Get the name of the file opened */
    std::string FileName() { return m_name; };

    /** If the file is opened */
    bool Opened() { return m_opened; };

    /** Close the stream */
    void Close();

    /** Read the next line */
    std::string ReadLine();

    /** Read the next delimeter */
    std::string ReadNext( const std::string &delim , bool ignoreReturn = true, bool ignoreWhiteSpace = true, bool ignoreTab = true);

    /** Read the next number */
    double ReadDouble();

    /** Read the next int */
    int ReadInt();
    /** Get a single char */
    char Read();
    /** Peek at the next char in the stream */
    char Peek();
    /** Seek to a location */
    void Seek( int position );

    /** End of File */
    bool IsEnd();

    /** Get position */
    int GetPosition() { return m_position; };
    /** Get Size */
    int Size() { return m_size; };

    /** Set Data */
    void SetData( char* buf, int size );
    /** Get Raw Data */
    char* GetRawData() { return m_data; };

private:
    /** Read a number */
    std::string ReadNumber(bool decimal);
    // name of the file
    std::string m_name;

    // data
    char* m_data;
    // size of file
    int     m_size;
    // position in the file
    int m_position;

    // if the file is opened
    bool    m_opened;
public:
    virtual ~MFile(void);
};
